package Day_0222.Spring;

/**
 * @author zxc
 * @date 2023/02/22 14:16
 **/
public class BeanFactory_ApplicationContext {
    public static void main(String[] args) {
        /**
         * BeanFactory 和 ApplicationContext之间的区别
         * ===》
         * 1.BeanFactory和ApplicationContext是Spring的两大核心接口，都可以当做 Spring容器。
         * 其中，ApplicationContext是BeanFactory的子接口。
         *
         * 2.依赖关系
         * 1）BeanFactory ：是Spring里面最底层的接口;
         * 包含了各种Bean的定义，读取bean配置文档，管理bean的加载、实例化，控制bean的生命周期，维护bean之间的依赖关系。
         * 2）ApplicationContext接口作为BeanFactory的派生 ：
         * 除了提供BeanFactory所具有的功能外，还提供了更完整的框架功能：
         * （1）继承MessageSource，因此支持国际化。
         * （2）统一的资源文件访问方式。
         * （3）提供在监听器中注册bean的事件。
         * （4）同时加载多个配置文件。
         * （5）载入多个（有继承关系）上下文 ，使得每一个上下文都专注于一个特定的层次，比如应用的web层。
         *
         * 3.加载方式
         * （1）BeanFactory采用的是 延迟加载形式来注入Bean的，即，只有在使用到某个Bean时(调用getBean())，才对该Bean进行加载实例化。
         *  这样，我们就不能发现一些存在的Spring的配置问题。
         *  如果Bean的某一个属性没有注入，BeanFacotry加载后，直至第一次使用调用getBean方法才会抛出异常。
         * （2）ApplicationContext，是在容器启动时，一次性创建了所有的Bean。
         *  在容器启动时，可以发现Spring中存在的配置错误，这样有利于检查所依赖属性是否注入。
         *  ApplicationContext启动后预载入所有的单实例Bean，通过预载入单实例bean ,确保当你需要的时候，你就不用等待，因为它们已经创建好了。
         * （3）相对于基本的BeanFactory，ApplicationContext 唯一的不足是占用内存空间。
         *  当应用程序配置Bean较多时，程序启动较慢。
         *
         * 4.创建方式
         * （1）BeanFactory通常以编程的方式被创建，
         * （2）ApplicationContext还能以声明的方式创建，如使用ContextLoader。
         *
         * 5.注册方式
         * （1）BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用，
         * （2）两者之间的区别是：BeanFactory需要手动注册，而ApplicationContext则是自动注册。
         *
         *
         */
    }
}
